TINY = {};

TINY.box = function() {
	var j, m, b, g, v, p = 0;
	return {
		show : function(o) {
			v = {
				opacity : 70,
				close : 1,
				animate : 1,
				fixed : 1,
				mask : 1,
				maskid : '',
				boxid : '',
				topsplit : 2,
				url : 0,
				post : 0,
				height : 0,
				width : 0,
				html : 0,
				iframe : 0
			};
			for (s in o) {
				v[s] = o[s]
			}
			if (!p) {
				j = document.createElement('div');
				j.className = 'tbox';
				p = document.createElement('div');
				p.className = 'tinner';
				b = document.createElement('div');
				b.className = 'tcontent';
				m = document.createElement('div');
				m.className = 'tmask';
				g = document.createElement('div');
				g.className = 'tclose';
				g.v = 0;
				g.id = 'closediv';
				document.body.appendChild(m);
				document.body.appendChild(j);
				j.appendChild(p);
				p.appendChild(b);
				m.onclick = g.onclick = TINY.box.hide;
				window.onresize = TINY.box.resize
			} else {
				j.style.display = 'none';
				clearTimeout(p.ah);
				if (g.v) {
					p.removeChild(g);
					g.v = 0
				}
			}
			p.id = v.boxid;
			m.id = v.maskid;
			j.style.position = v.fixed ? 'fixed' : 'absolute';
			if (v.html && !v.animate) {
				p.style.backgroundImage = 'none';
				b.innerHTML = v.html;
				b.style.display = '';
				p.style.width = v.width ? v.width + 'px' : 'auto';
				p.style.height = v.height ? v.height + 'px' : 'auto'					
			} else {
				b.style.display = 'none';
				if (!v.animate && v.width && v.height) {
					p.style.width = v.width + 'px';
					p.style.height = v.height + 'px'
				} else {
					p.style.width = p.style.height = '100px'
				}
			}
			if (v.mask) {
				this.mask();
				this.alpha(m, 1, v.opacity)
			} else {
				this.alpha(j, 1, 100)
			}
			if (v.autohide) {
				p.ah = setTimeout(TINY.box.hide, 1000 * v.autohide)
			} else {
				document.onkeyup = TINY.box.esc
			}
		},
		fill : function(c, u, k, a, w, h) {
			if (u) {
				if (v.image) {
					var i = new Image();
					i.onload = function() {
						w = w || i.width;
						h = h || i.height;
						TINY.box.psh(i, a, w, h)
					};
					i.src = v.image
				} else if (v.iframe) {
					this.psh('<iframe src="' + v.iframe + '" width="' + v.width
							+ '" frameborder="0" height="' + v.height
							+ '"></iframe>', a, w, h)
				} else {
					var x = window.XMLHttpRequest ? new XMLHttpRequest()
							: new ActiveXObject('Microsoft.XMLHTTP');
					x.onreadystatechange = function() {
						if (x.readyState == 4 && x.status == 200) {
							p.style.backgroundImage = '';
							TINY.box.psh(x.responseText, a, w, h)
						}
					};
					if (k) {
						x.open('POST', c, true);
						x.setRequestHeader('Content-type',
								'application/x-www-form-urlencoded');
						x.send(k)
					} else {
						x.open('GET', c, true);
						x.send(null)
					}
				}
			} else {
				this.psh(c, a, w, h)
			}
		},
		psh : function(c, a, w, h) {
			if (typeof c == 'object') {
				b.appendChild(c)
			} else {
				b.innerHTML = c
			}
			var x = p.style.width, y = p.style.height;
			if (!w || !h) {
				p.style.width = w ? w + 'px' : '';
				p.style.height = h ? h + 'px' : '';
				b.style.display = '';
				if (!h) {
					h = parseInt(b.offsetHeight)
				}
				if (!w) {
					w = parseInt(b.offsetWidth)
				}
				b.style.display = 'none'
			}
			p.style.width = x;
			p.style.height = y;
			this.size(w, h, a)
		},
		esc : function(e) {
			e = e || window.event;
			if (e.keyCode == 27) {
				TINY.box.hide()
			}
		},
		hide : function() {
			TINY.box.alpha(j, -1, 0, 3);
			document.onkeypress = null;
			if (v.closejs) {
				v.closejs()
			}
		},
		resize : function() {
			TINY.box.pos();
			TINY.box.mask()
		},
		mask : function() {
			m.style.height = (this.total(1)-40) + 'px';
			m.style.width = (this.total(0)-40) + 'px'
		},
		pos : function() {
			var t;
			if (typeof v.top != 'undefined') {
				t = v.top
			} else {
				t = (this.height() / v.topsplit) - (j.offsetHeight / 2);
				t = t < 20 ? 20 : t
			}
			if (!v.fixed && !v.top) {
				t += this.top()
			}
			j.style.top = t + 'px';
			j.style.left = typeof v.left != 'undefined' ? v.left + 'px' : (this
					.width() / 2)
					- (j.offsetWidth / 2) + 'px'
		},
		alpha : function(e, d, a) {
			clearInterval(e.ai);
			if (d) {
				e.style.opacity = 0;
				e.style.filter = 'alpha(opacity=0)';
				e.style.display = 'block';
				TINY.box.pos()
			}
			e.ai = setInterval(function() {
				TINY.box.ta(e, a, d)
			}, 20)
		},
		ta : function(e, a, d) {
			var o = Math.round(e.style.opacity * 100);
			if (o == a) {
				clearInterval(e.ai);
				if (d == -1) {
					e.style.display = 'none';
					e == j ? TINY.box.alpha(m, -1, 0, 2)
							: b.innerHTML = p.style.backgroundImage = ''
				} else {
					if (e == m) {
						this.alpha(j, 1, 100)
					} else {
						j.style.filter = '';
						TINY.box.fill(v.html || v.url, v.url || v.iframe
								|| v.image, v.post, v.animate, v.width,
								v.height)
					}
				}
			} else {
				var n = a - Math.floor(Math.abs(a - o) * .5) * d;
				e.style.opacity = n / 100;
				e.style.filter = 'alpha(opacity=' + n + ')'
			}
		},
		size : function(w, h, a) {
			if (a) {
				clearInterval(p.si);
				var wd = parseInt(p.style.width) > w ? -1 : 1, hd = parseInt(p.style.height) > h ? -1
						: 1;
				p.si = setInterval(function() {
					TINY.box.ts(w, wd, h, hd)
				}, 20)
			} else {
				p.style.backgroundImage = 'none';
				if (v.close) {
					p.appendChild(g);
					g.v = 1
				}
				p.style.width = w + 'px';
				p.style.height = h + 'px';
				b.style.display = '';
				this.pos();
				if (v.openjs) {
					v.openjs()
				}
			}
		},
		ts : function(w, wd, h, hd) {
			var cw = parseInt(p.style.width), ch = parseInt(p.style.height);
			if (cw == w && ch == h) {
				clearInterval(p.si);
				p.style.backgroundImage = 'none';
				b.style.display = 'block';
				if (v.close) {
					p.appendChild(g);
					g.v = 1
				}
				if (v.openjs) {
					v.openjs()
				}
			} else {
				if (cw != w) {
					p.style.width = (w - Math.floor(Math.abs(w - cw) * .6) * wd)
							+ 'px'
				}
				if (ch != h) {
					p.style.height = (h - Math.floor(Math.abs(h - ch) * .6)
							* hd)
							+ 'px'
				}
				this.pos()
			}
		},
		top : function() {
			return document.documentElement.scrollTop
					|| document.body.scrollTop
		},
		width : function() {
			return self.innerWidth || document.documentElement.clientWidth
					|| document.body.clientWidth
		},
		height : function() {
			return self.innerHeight || document.documentElement.clientHeight
					|| document.body.clientHeight
		},
		total : function(d) {
			var b = document.body, e = document.documentElement;
			return d ? Math.max(Math.max(b.scrollHeight, e.scrollHeight), Math
					.max(b.clientHeight, e.clientHeight)) : Math.max(Math.max(
					b.scrollWidth, e.scrollWidth), Math.max(b.clientWidth,
					e.clientWidth))
		}
	}
}();